using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 挂载到每一个对话按钮选项上
/// </summary>
public class OptionUI : MonoBehaviour
{
    public Text optionText;
    private Button optionBtn;
    public DialoguePiece dialoguePiece;
    public string nextPieceID;
    private bool takeQuest;
    private void Awake()
    {
        optionBtn = GetComponent<Button>();
        optionBtn.onClick.AddListener(OptionClick);
    }
    public void UpdateOptionUI(DialoguePiece piece, DialogueOption option)
    {
        dialoguePiece = piece;
        optionText.text = option.text;

        nextPieceID = option.targetID;
        takeQuest = option.takeQuest;
    }
    public void OptionClick()
    {
        // 对话选项包含任务数据
        if (dialoguePiece.questData != null)
        {
            // 点击的对话选项勾选了接受任务
            if (takeQuest)
            {
                var task = new QuestManager.QuestTask
                {
                    questData = Instantiate(dialoguePiece.questData)
                };
                // 如果已经接受任务
                if (QuestManager.Instance.HaveTask(task.questData))
                {
                    // 判断任务条件是否满足，并将任务转化为 交付完结状态
                    if (QuestManager.Instance.GetQuestTask(task.questData).TaskState == QuestState.Complete)
                    {
                        // 调用每一个任务中的给予奖励方法
                        task.questData.GiveRewards();
                        QuestManager.Instance.GetQuestTask(task.questData).TaskState = QuestState.Finish;
                    }
                }
                // 没有接受过这个任务
                else
                {
                    // 接受任务
                    QuestManager.Instance.tasks.Add(task);
                    // 正在进行任务
                    QuestManager.Instance.GetQuestTask(task.questData).TaskState = QuestState.Progress;

                    // 循环检查任务需求的所有物品
                    foreach (var requireItemName in task.questData.GetRequireNameList())
                    {
                        InventoryManager.Instance.CheckQuestItemInbag(requireItemName);
                    }
                }
            }
        }
        if (nextPieceID == string.Empty)
        {
            DialogueUI.Instance.dialoguePanel.SetActive(false);
            return;
        }
        else
        {
            DialogueUI.Instance.UpdateMainDialogue(DialogueUI.Instance.currentData.dialoguePieceDict[nextPieceID]);
        }
    }
}
